Problématique
- Établir une jauge de personnes présentes dans le magasin, en accord avec les règles sanitaires.
Cahier des charges
Explication du projet
Le but du projet est de permettre aux clients de voir en direct le nombre de personnes présentes. Ce nombre est affiché sur un afficheur digital.
Fonctionnement
Il y a deux capteurs de distance à ultrasons. Le premier détecte si quelqu'un passe à l'entrée et ajoute un au compteur, le second détecte les passages à la sortie et enlève donc un au compteur. Un "bip" est déclenché à chaque passage pour le confirmer.
Répartition des tâches
Tout d'abord, Erwan et Samuel se sont occupés du code des capteurs de distance et du "bip" sonore. Ensuite Mathéo a programmé l'afficheur digital. Samuel a rédigé le bilan html du projet.
Le code et ses explications
-=-=-=-=-=-=- CARTE 1 - CAPTEURS -=-=-=-=-=-=-
# importation des bibliothèques microbit
from microbit import *
from micro_grove import *
import radio
#on choisit un canal pour communiquer entre les cartes
radio.config(channel=22)
radio.on()
# les notes sont définies en Scientific Pitch Notation (SPN).
entree = "f5:2" #Bip sonore quand quelqu'un entre
sortie = "c4:2" #Idem quand quelqu'un sort
while True:
t = mesure_temps_A_R(pin1)
distance = t * 0.034328 / 2 # 1er capteur mesure la distance en cm
if distance < 30:
play(entree) # joue le bip d'entrée
radio.send("entree") # Envoie "entree" à la carte 2
t2 = mesure_temps_A_R(pin2)
distance2 = t2 * 0.034328 / 2 # 2ème capteur
if distance2 < 30:
play(sortie)
radio.send("sortie")
sleep(700) # attend 0.7 secondes, pour compter qu'une fois chaque personne
-=-=-=-=-=-=- CARTE 2 - ACTIONNEUR -=-=-=-=-=-=-
from microbit import *
from microbit import *
import radio
radio.config(channel=22)
radio.on()
n_client = 0
# -=- Code nécessaire pour l'afficheur -=-
ASCII_4DD_NUM = bytearray(b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F')
def start4dd(clk,dio):
dio.write_digital(0)
clk.write_digital(0)
def stop4dd(clk,dio):
dio.write_digital(0)
clk.write_digital(1)
dio.write_digital(1)
def writeByte4dd(clk,dio,cmd):
for i in range(8):
dio.write_digital((cmd>>i)&1)
clk.write_digital(1)
clk.write_digital(0)
clk.write_digital(0)
clk.write_digital(1)
clk.write_digital(0)
def command4dd(clk,dio,cmd):
start4dd(clk,dio)
writeByte4dd(clk,dio,cmd)
stop4dd(clk,dio)
def write4dd(clk,dio,s,p=0):
if not 0<=p<=3:
raise ValueError('Position out of range')
command4dd(clk,dio,0x40)
start4dd(clk,dio)
writeByte4dd(clk,dio,0xC0|p)
for i in s:
writeByte4dd(clk,dio,i)
stop4dd(clk,dio)
command4dd(clk,dio,0x88|6)
def tm1637_init(clk,dio):
command4dd(clk,dio,0x40)
command4dd(clk,dio,0x88|6)
def tm1637_encodeNum(str):
s = bytearray(len(str))
for i in range(len(str)):
o = ord(str[i])
if o >= 48 and o <= 57:
s[i] = ASCII_4DD_NUM[o-48]
return s
tm1637_init(pin0, pin14)
def tm1637_setNumber(clk, dio, n):
if not -999 <= n <= 9999:
raise ValueError('Number out of range')
write4dd(clk, dio, tm1637_encodeNum('{0: >4d}'.format(int(n))))
# -=- Code nécessaire pour l'afficheur -=-
while True:
message = radio.receive() # met le mot reçu dans la variable message
if message == "entree": # Si quelqu'un est sorti
n_client = n_client +1 # On ajoute 1 au compteur
if message == "sortie":
n_client = n_client -1
tm1637_setNumber(pin0, pin14, n_client) # Affiche le nombre de clients
sleep(100)
Difficultés
Nos fichiers se sont supprimés à deux reprises dans le dossier de la classe. La première fois nous avons tout recodé et la deuxième nous avions la plupart du code sur une clé USB.
Créateurs incroyables
- Samuel BURON
- Mathéo GUILLEVIC
- Erwan MORICEAU
Images du projet
Carte 1
Carte 2
Carte 356-cr et 245-yk